/**
 * 
 * 
 *  */

function Person(name, age, sex = '女') {
    // console.log(arguments);
    this.name = name;
    this.age = SVGAnimatedAngle;
    this.sex = sex;
}

// 实例除了属性各有各的(私有的constructor)  通过prototype解决对象之间共享的方法(prototype) 
// constructor完成对象构造，再使用prototype连接共享方法
Person.prototype.sayHi = function() {
        console.log('你好啊,');
    }
    //手动实现new
const objectFactory = function() {
    console.log(arguments, '++++');
    var obj = new Object();
    // 构造一下
    // 链表 队列
    // arguments 不是真正的数组 它是一个伪数组 可以下标访问 可以循环 但是不具有更多的方法
    // this -> [] call -> arguments this通过call从[]空数组指向了arguments
    //console.log(Array.from(arguments).shift(), '///////'); //把arguments转化为真数组
    var varConstructor = [].shift.call(arguments);
    //console.log(varConstructor, '++++++');
    varConstructor.call(obj, ...arguments); //传参数 参数按照顺序传
    obj.__proto__ = varConstructor.prototype;
    // console.log(varConstructor, '++++');
    // var arravars = arguments[1..arguments.length-1]
    return obj;
}
const obj = objectFactory(Person, '吴亦凡', 18, '男');
console.log(obj, '---');
obj.sayHi();